## RR_data: RR stands for "Rightful Resistance"

###Install packages

library(tidyverse)
library(estimatr)
library(ggpubr)
library(vtable)
library(stargazer)
library(rcompanion)
library(mediation)

### Figure 1 - Distribution of DVs

RR_data$DV_support<-RR_data$protest_support

RR_data$DV_support[RR_data$DV_support=="1"] <- "Completely Unsupportive"
RR_data$DV_support[RR_data$DV_support=="2"] <- "Unsupportive"
RR_data$DV_support[RR_data$DV_support=="3"] <- "Somewhat Unsupportive"
RR_data$DV_support[RR_data$DV_support=="4"] <- "Somewhat Supportive"
RR_data$DV_support[RR_data$DV_support=="5"] <- "Supportive"
RR_data$DV_support[RR_data$DV_support=="6"] <- "Completely supportive"

RR_data$DV_support = factor(RR_data$DV_support,levels = c('Completely Unsupportive', 'Unsupportive', 'Somewhat Unsupportive', 'Somewhat Supportive','Supportive','Completely supportive'))

graph1<-ggplot(RR_data, aes(x = DV_support)) +
  geom_bar(aes(y = (..count..)/sum(..count..)), fill='gray48') +
  xlab("Support for Protest") +
  scale_y_continuous(labels = scales::percent, name = "Percentage Respondents") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))


RR_data$DV_justified<-RR_data$protest_justified

RR_data$DV_justified[RR_data$DV_justified=="1"] <- "Completely Unjustified"
RR_data$DV_justified[RR_data$DV_justified=="2"] <- "Unjustified"
RR_data$DV_justified[RR_data$DV_justified=="3"] <- "Somewhat Unjustified"
RR_data$DV_justified[RR_data$DV_justified=="4"] <- "Somewhat Justified"
RR_data$DV_justified[RR_data$DV_justified=="5"] <- "Justified"
RR_data$DV_justified[RR_data$DV_justified=="6"] <- "Completely Justified"

RR_data$DV_justified = factor(RR_data$DV_justified,levels = c('Completely Unjustified', 'Unjustified', 'Somewhat Unjustified', 'Somewhat Justified','Justified','Completely Justified'))

graph2<-ggplot(RR_data, aes(x = DV_justified)) +
  geom_bar(aes(y = (..count..)/sum(..count..)), fill='gray48') +
  xlab("Protest Justified") +
  scale_y_continuous(labels = scales::percent, name = "Percentage Respondents") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

ggarrange(graph1, graph2,
          common.legend = TRUE, legend = "bottom")

### Balances of Covariates
## Balance of Covariates across treatment frames- Table 3

RR_data$urban[RR_data$urban=="1"] <- "Urban"
RR_data$urban[RR_data$urban=="0"] <- "Rural"
RR_data$female[RR_data$female=="1"] <- "Women"
RR_data$female[RR_data$female=="0"] <- "Men"
RR_data$party[RR_data$party=="1"] <- "Yes"
RR_data$party[RR_data$party=="0"] <- "No"

RR_data$pride <- rowMeans(cbind(RR_data$proud1,RR_data$proud2))

covs1 <- subset(RR_data, select = c(message1,education,urban,north_born,female,age,risky,party,income,politics_interest,pride))

sumtable(covs1, group = 'message1', group.test = TRUE)

## Balance of Covariates across Endorsers of Protests - Appendix 3

covs2 <- subset(RR_data, select = c(identity_simple,education,urban,north_born,female,age,risky,party,income,politics_interest,pride))

sumtable(covs2, group = 'identity_simple', group.test = TRUE)

###  Main results 
# Table 4: Main results of pro-democratic Frame on Support for Protest

model1<-lm(protest_support~message1, data = RR_data)
model2<-lm(protest_support~identity_simple, data = RR_data)
model3<-lm(protest_support~message1+identity_simple, data = RR_data)


stargazer(model1,model2,model3,type = "text")

# Models With robust standard errors
model1_robust<-lm_robust(protest_support~message, data = RR_data)
model2_robust<-lm_robust(protest_support~identity_simple, data = RR_data)
model3_robust<-lm_robust(protest_support~message+identity_simple, data = RR_data)


# Table 5: Main Results of Pro-democracy on Protest Justified

model4<-lm(protest_justified~message1,data = RR_data)
model5<-lm(protest_justified~identity_simple, data = RR_data)
model6<-lm(protest_justified~message1+identity_simple, data = RR_data)

stargazer(model4,model5,model6,type = "text")

# Models With robust standard errors
model4_robust<-lm_robust(protest_justified~message1,data = RR_data)
model5_robust<-lm_robust(protest_justified~identity_simple, data = RR_data)
model6_robust<-lm_robust(protest_justified~message1+identity_simple, data = RR_data)

### ROBUSTNESS CHECK BELOW:

## Appendix 4: Manipulation Checks

# maniulation check -Recall the identity of Facebook posters

RR_data$Endorsers<-RR_data$identity6
RR_data$Who_Endorsed_Protest<-RR_data$manip_chk1

ggplot(RR_data, aes(Endorsers, ..count..)) + geom_bar(aes(fill = Who_Endorsed_Protest), position = "dodge")


# manipulation check - Recall the nature of the message of the Facebook post

RR_data$manip_chk2[RR_data$manip_chk2=="Democracy"] <- "Prodemocratic Frame"
RR_data$manip_chk2[RR_data$manip_chk2=="Free Press"] <- "Prodemocratic Frame"
RR_data$manip_chk2[RR_data$manip_chk2=="Policy Frame"] <- "Rightful Frame"

RR_data$Frame_Group<-RR_data$message1
RR_data$Nature_Of_Protest<-RR_data$manip_chk2

ggplot(RR_data, aes(Frame_Group, ..count..)) + geom_bar(aes(fill = Nature_Of_Protest), position = "dodge")


## Appendix 7: Results with an averaged index of 2 DVs

RR_data$average <- rowMeans(cbind(RR_data$protest_support,RR_data$protest_justified))

model7<-lm(average~message1+identity_simple, data = RR_data)
stargazer(model7,type = "text")

# Model 7 with robust standard errors
model7_robust<-lm(average~message1+identity_simple, data = RR_data)

## Appendix 8: Heterogeneous Effect of Identity of Endorsers with Averaged Index Outcome 

model8<-lm(average~identity_simple*education+female+age+party+north_born+politics_interest+risky+proud1+income+urban,data = RR_data)
model9<-lm(average~identity_simple*party+education+female+age+north_born+politics_interest+risky+proud1+income+urban,data = RR_data)
model10<-lm(average~identity_simple*north_born+party+education+female+age+politics_interest+risky+proud1+income+urban,data = RR_data)
model11<-lm(average~identity_simple*urban+north_born+party+education+female+age+politics_interest+risky+proud1+income,data = RR_data)

stargazer(model8,model9,model10,model11,type = "text")

# Model with Robust standard errors
model8_robust<-lm_robust(average~identity_simple*education+female+age+party+north_born+politics_interest+risky+proud1+income+urban,data = RR_data)
model9_robust<-lm_robust(average~identity_simple*party+education+female+age+north_born+politics_interest+risky+proud1+income+urban,data = RR_data)
model10_robust<-lm_robust(average~identity_simple*north_born+party+education+female+age+politics_interest+risky+proud1+income+urban,data = RR_data)
model11_robust<-lm_robust(average~identity_simple*urban+north_born+party+education+female+age+politics_interest+risky+proud1+income,data = RR_data)

## Appendix 6: Heterogeneous Effects of Endorsers’ Identities
model12<-lm(protest_support~identity_simple*education+female+age+party+north_born+politics_interest+risky+proud1+income+urban,data = RR_data)
model13<-lm(protest_support~identity_simple*party+education+female+age+north_born+politics_interest+risky+proud1+income+urban,data = RR_data)
model14<-lm(protest_support~identity_simple*north_born+party+education+female+age+politics_interest+risky+proud1+income+urban,data = RR_data)
model15<-lm(protest_support~identity_simple*urban+north_born+party+education+female+age+politics_interest+risky+proud1+income,data = RR_data)

model16<-lm(protest_justified~identity_simple*education+female+age+party+north_born+politics_interest+risky+proud1+income+urban,data = RR_data)
model17<-lm(protest_justified~identity_simple*party+education+female+age+north_born+politics_interest+risky+proud1+income+urban,data = RR_data)
model18<-lm(protest_justified~identity_simple*north_born+party+education+female+age+politics_interest+risky+proud1+income+urban,data = RR_data)
model19<-lm(protest_justified~identity_simple*urban+north_born+party+education+female+age+politics_interest+risky+proud1+income,data = RR_data)

stargazer(model12,model13,model14,model15,type="text")
stargazer(model16,model17,model18,model19,type="text")

## Appendix 9A: Impact of Different Facebook Endorsement Frames

RR_data$Frame<-RR_data$manip_chk3
RR_data$Frame[RR_data$Frame=="Unrightful Frame"] <- "Rightful Frame"

Sum = groupwiseMean(protest_support~Frame,
                    data   = RR_data,
                    conf   = 0.95,
                    digits = 3, na.rm = TRUE)


graph3<-ggplot(Sum,                ### The data frame to use.
               aes(x = Frame ,
                   y = Mean, group=1)) +
  geom_errorbar(aes(ymin = Trad.lower,
                    ymax = Trad.upper),
                width = 0.05, 
                size  = 0.5) +
  geom_point(shape = 15, 
             size  = 4) + ggtitle("Protest Support" )+ geom_line(aes(x=1:nrow(Sum),y = Mean)) +
  theme_bw() +
  theme(axis.title   = element_text(face  = "bold")) + theme(axis.text = element_text(size = 13)) +
  
  ylab("Mean Protest Support") + scale_y_continuous(limits = c(1,6),
                                                    breaks=c(1,2,3,4,5,6),
                                                    labels = c("Completely unsupportive", "Unsupportive", "Somewhat unsupportive",
                                                               "Somewhat supportive", "Supportive", "Completely supportive"))

Sum1 = groupwiseMean(protest_justified~Frame,
                     data   = RR_data,
                     conf   = 0.95,
                     digits = 3, na.rm = TRUE)


graph4<-ggplot(Sum1,                ### The data frame to use.
               aes(x = Frame ,
                   y = Mean, group=1)) +
  geom_errorbar(aes(ymin = Trad.lower,
                    ymax = Trad.upper),
                width = 0.05, 
                size  = 0.5) +
  geom_point(shape = 15, 
             size  = 4) + ggtitle("Protest Justified" )+ geom_line(aes(x=1:nrow(Sum1),y = Mean)) +
  theme_bw() +
  theme(axis.title   = element_text(face  = "bold")) + theme(axis.text = element_text(size = 13)) +
  
  ylab("Mean Protest Justified") + scale_y_continuous(limits = c(1,6),
                                                      breaks=c(1,2,3,4,5,6),
                                                      labels = c("Completely unjustified", "Unjustified", "Somewhat unjustified",
                                                                 "Somewhat justified", "Justified", "Completely justified"))

ggarrange(graph3, graph4,
          common.legend = TRUE, legend = "bottom")


## Appendix 9B: Effects of different identities

Sum2 = groupwiseMean(protest_support~identity4,
                     data   = RR_data,
                     conf   = 0.95,
                     digits = 3, na.rm = TRUE)


graph5<-ggplot(Sum2,                ### The data frame to use.
               aes(x = identity4 ,
                   y = Mean, group=1)) +
  geom_errorbar(aes(ymin = Trad.lower,
                    ymax = Trad.upper),
                width = 0.05, 
                size  = 0.5) +
  geom_point(shape = 15, 
             size  = 4) + ggtitle("Protest Support" )+ geom_line(aes(x=1:nrow(Sum2),y = Mean)) +
  theme_bw() +
  theme(axis.title   = element_text(face  = "bold")) + theme(axis.text = element_text(size = 13)) +  labs(x = "Endorser Identity",
                                                                                                          color  = "Message",
                                                                                                          y = "Mean Protest Support") + scale_y_continuous(limits = c(1,6),
                                                                                                                                                           breaks=c(1,2,3,4,5,6),
                                                                                                                                                           labels = c("Completely unsupportive", "Unsupportive", "Somewhat unsupportive",
                                                                                                                                                                      "Somewhat supportive", "Supportive", "Completely supportive"))
graph5


Sum3 = groupwiseMean(protest_justified~identity4,
                     data   = RR_data,
                     conf   = 0.95,
                     digits = 3, na.rm = TRUE)


graph6<-ggplot(Sum3,                ### The data frame to use.
               aes(x = identity4 ,
                   y = Mean, group=1)) +
  geom_errorbar(aes(ymin = Trad.lower,
                    ymax = Trad.upper),
                width = 0.05, 
                size  = 0.5) +
  geom_point(shape = 15, 
             size  = 4) + ggtitle("Protest Justified" )+ geom_line(aes(x=1:nrow(Sum3),y = Mean)) +
  theme_bw() +
  theme(axis.title   = element_text(face  = "bold")) + theme(axis.text = element_text(size = 13)) +
  
  labs(x = "Endorser Identity",
       y = "Mean Protest Support") + scale_y_continuous(limits = c(1,6),
                                                        breaks=c(1,2,3,4,5,6),
                                                        labels = c("Completely unjustified", "Unjustified", "Somewhat unjustified",
                                                                   "Somewhat justified", "Justified", "Completely justified"))
graph6



## Appendix 9C: Impact of Different Prodemocracy Advocates

Sum4 = groupwiseMean(protest_support~identity5,
                     data   = RR_data,
                     conf   = 0.95,
                     digits = 3, na.rm = TRUE)


graph7<-ggplot(Sum4,                ### The data frame to use.
               aes(x = identity5 ,
                   y = Mean, group=1)) +
  geom_errorbar(aes(ymin = Trad.lower,
                    ymax = Trad.upper),
                width = 0.05, 
                size  = 0.5) +
  geom_point(shape = 15, 
             size  = 4) + ggtitle("Protest Support" )+ geom_line(aes(x=1:nrow(Sum4),y = Mean)) +
  theme_bw() +
  theme(axis.title   = element_text(face  = "bold")) + theme(axis.text = element_text(size = 13)) +
  
  labs(x = "Endorser Identity",
       y = "Mean Protest Support") + scale_y_continuous(limits = c(1,6),
                                                        breaks=c(1,2,3,4,5,6),
                                                        labels = c("Completely unsupportive", "Unsupportive", "Somewhat unsupportive",
                                                                   "Somewhat supportive", "Supportive", "Completely supportive"))

graph7

Sum5 = groupwiseMean(protest_justified~identity5,
                     data   = RR_data,
                     conf   = 0.95,
                     digits = 3, na.rm = TRUE)

graph8<-ggplot(Sum5,                ### The data frame to use.
               aes(x = identity5 ,
                   y = Mean, group=1)) +
  geom_errorbar(aes(ymin = Trad.lower,
                    ymax = Trad.upper),
                width = 0.05, 
                size  = 0.5) +
  geom_point(shape = 15, 
             size  = 4) + ggtitle("Protest Justified" )+ geom_line(aes(x=1:nrow(Sum5),y = Mean)) +
  theme_bw() +
  theme(axis.title   = element_text(face  = "bold")) + theme(axis.text = element_text(size = 13)) +
  
  labs(x = "Endorser Identity",
       y = "Mean Protest Support") + scale_y_continuous(limits = c(1,6),
                                                        breaks=c(1,2,3,4,5,6),
                                                        labels = c("Completely unjustified", "Unjustified", "Somewhat unjustified",
                                                                   "Somewhat justified", "Justified", "Completely justified"))
graph8

ggarrange(graph7, graph8,
          common.legend = TRUE, legend = "bottom")

### Appendix 10 - Interaction of Factors

## Protest support
data1 <- RR_data %>% 
  group_by(identity6, message1) %>% 
  summarise(y_mean = mean(protest_support),
            y_se = psych::describe(protest_support)$se)

data1 %>% 
  ggplot(aes(x = identity6, 
             y = y_mean, 
             color =message1)) +
  geom_point() +
  geom_errorbar(aes(ymin = y_mean-1.96*y_se, 
                    ymax = y_mean+1.96*y_se),
                width = .1)  +
  labs(x = "Endorser Identity",
       color  = "Frame",
       y = "Protest Support") +
  theme_minimal() +
  scale_y_continuous(limits = c(1,6),
                     breaks=c(1,2,3,4,5,6),
                     labels = c("Completely Unsupportive", "Unsupportive", "Somewhat Unsupportive",
                                "Somewhat Supportive", "Supportive", "Completely Supportive")) + theme(axis.text = element_text(size = 11)) + theme(axis.title = element_text(size = 17)) + theme(legend.text = element_text(size = 10)) 

## protest justified
data2 <- RR_data %>% 
  group_by(identity6, message1) %>% 
  summarise(y_mean = mean(protest_justified),
            y_se = psych::describe(protest_justified)$se)

data2 %>% 
  ggplot(aes(x = identity6, 
             y = y_mean, 
             color =message1)) +
  geom_point() +
  geom_errorbar(aes(ymin = y_mean-1.96*y_se, 
                    ymax = y_mean+1.96*y_se),
                width = .1)  +
  labs(x = "Endorser Identity",
       color  = "Frame",
       y = "Protest Justified") +
  theme_minimal() +
  scale_y_continuous(limits = c(1,6),
                     breaks=c(1,2,3,4,5,6),
                     labels = c("Completely Unjustified", "Unjustified", "Somewhat Unjustified",
                                "Somewhat Justified", "Justified", "Completely Justified")) + theme(axis.text = element_text(size = 11)) + theme(axis.title = element_text(size = 17)) + theme(legend.text = element_text(size = 10)) 


## interactions using pooled actors

data3 <- RR_data %>% 
  group_by(identity_simple, message1) %>% 
  summarise(y_mean = mean(protest_support),
            y_se = psych::describe(protest_support)$se)

graph9<-data3 %>% 
  ggplot(aes(x = identity_simple, 
             y = y_mean, 
             color =message1)) +
  geom_point() +
  geom_errorbar(aes(ymin = y_mean-1.96*y_se, 
                    ymax = y_mean+1.96*y_se),
                width = .1)  +
  labs(x = "Endorser Identity",
       color  = "Frame",
       y = "Protest Support") +
  theme_minimal() +
  scale_y_continuous(limits = c(1,6),
                     breaks=c(1,2,3,4,5,6),
                     labels = c("Completely Unsupportive", "Unsupportive", "Somewhat Unsupportive",
                                "Somewhat Supportive", "Supportive", "Completely Supportive")) + theme(axis.text = element_text(size = 11)) + theme(axis.title = element_text(size = 17)) + theme(legend.text = element_text(size = 10)) 


data4 <- RR_data %>% 
  group_by(identity_simple, message1) %>% 
  summarise(y_mean = mean(protest_justified),
            y_se = psych::describe(protest_justified)$se)

graph10<-data4 %>% 
  ggplot(aes(x = identity_simple, 
             y = y_mean, 
             color =message1)) +
  geom_point() +
  geom_errorbar(aes(ymin = y_mean-1.96*y_se, 
                    ymax = y_mean+1.96*y_se),
                width = .1)  +
  labs(x = "Endorser Identity",
       color  = "Frame",
       y = "Protest Justified") +
  theme_minimal() +
  scale_y_continuous(limits = c(1,6),
                     breaks=c(1,2,3,4,5,6),
                     labels = c("Completely Unjustified", "Unjustified", "Somewhat Unjustified",
                                "Somewhat Justified", "Justified", "Completely Justified")) + theme(axis.text = element_text(size = 11)) + theme(axis.title = element_text(size = 17)) + theme(legend.text = element_text(size = 10)) 

ggarrange(graph9,graph10,
          common.legend = TRUE, legend = "bottom")

## Appendix 11: Impact of Frames and Identities with Pre-Treatment Covariates

RR_data$message1<-as.factor(RR_data$message1)
RR_data$message1 = relevel(RR_data$message1, ref = "Rightful Frame")
model20<-lm(protest_support~message1+identity_simple+education+female+age+party+north_born+politics_interest+risky+proud1+income+urban,data = RR_data)
model21<-lm(protest_justified~message1+identity_simple+education+female+age+party+north_born+politics_interest+risky+proud1+income+urban,data = RR_data)
stargazer(model20,model21,type = "text")

# Models with robust standard errors
model20_robust<-lm(protest_support~message1+identity_simple+education+female+age+party+north_born+politics_interest+risky+proud1+income+urban,data = RR_data)
model21_robust<-lm(protest_justified~message1+identity_simple+education+female+age+party+north_born+politics_interest+risky+proud1+income+urban,data = RR_data)


### Mediation Analysis

## Mediation effect of the pro-democratic frame
# Panel 1: Protest Support 

RR_data$message1<-as.factor(RR_data$message1)
RR_data$message1 <- relevel(RR_data$message1, ref = "Rightful Frame") 

med.fit <- lm(poster_moral ~ message1 +education+female+age+party+north_born+politics_interest+risky+proud1+income+urban, data = RR_data)
med.fit1 <- lm(protest_legal ~ message1 +education+female+age+party+north_born+politics_interest+risky+proud1+income+urban, data = RR_data)
med.fit2 <- lm(protest_repress ~ message1 +education+female+age+party+north_born+politics_interest+risky+proud1+income+urban, data = RR_data)

out.fit <- lm(protest_support~poster_moral + message1 +protest_repress+ protest_legal+education+female+age+party+north_born+politics_interest+risky+proud1+income+urban, data = RR_data)

stargazer(med.fit,med.fit1,med.fit2,out.fit,type = "text")

# Models with robust standard errors

med.fit_robust <- lm_robust(poster_moral ~ message1 +education+female+age+party+north_born+politics_interest+risky+proud1+income+urban, data = RR_data)
med.fit1_robust <- lm_robust(protest_legal ~ message1 +education+female+age+party+north_born+politics_interest+risky+proud1+income+urban, data = RR_data)
med.fit2_robust <- lm_robust(protest_repress ~ message1 +education+female+age+party+north_born+politics_interest+risky+proud1+income+urban, data = RR_data)

out.fit_robust <- lm_robust(protest_support~poster_moral + message1 +protest_repress+ protest_legal+education+female+age+party+north_born+politics_interest+risky+proud1+income+urban, data = RR_data)

# Panel 2: Protest Justified 
out.fit1 <- lm(protest_justified~poster_moral + message1 +protest_repress+ protest_legal+education+female+age+party+north_born+politics_interest+risky+proud1+income+urban, data = RR_data)

stargazer(med.fit,med.fit1,med.fit2,out.fit1,type = "text")

# Model with robust standard errors

out.fit1_robust <- lm_robust(protest_justified~poster_moral + message1 +protest_repress+ protest_legal+education+female+age+party+north_born+politics_interest+risky+proud1+income+urban, data = RR_data)

## Sensitivity Analysis - Appendix 15

### Sensitivity Analysis 

## Protest Support
med.out1<-mediate(med.fit,out.fit,treat = "message1",mediator = "poster_moral", robustSE = TRUE,sims = 1000)

med.out2<-mediate(med.fit1,out.fit,treat = "message1",mediator = "protest_legal", robustSE = TRUE,sims = 1000)
med.out3<-mediate(med.fit2,out.fit,treat = "message1",mediator = "protest_repress", robustSE = TRUE,sims = 1000)

sens.out1 <- medsens(med.out1, rho.by = 0.1, effect.type = "indirect", sims = 1000)
sens.out2 <- medsens(med.out2, rho.by = 0.1, effect.type = "indirect", sims = 1000)
sens.out3 <- medsens(med.out3, rho.by = 0.1, effect.type = "indirect", sims = 1000)

## Protest Justified

med.out4<-mediate(med.fit,out.fit1,treat = "message1",mediator = "poster_moral", robustSE = TRUE,sims = 1000)

med.out5<-mediate(med.fit1,out.fit1,treat = "message1",mediator = "protest_legal", robustSE = TRUE,sims = 1000)
med.out6<-mediate(med.fit2,out.fit1,treat = "message1",mediator = "protest_repress", robustSE = TRUE,sims = 1000)

sens.out4 <- medsens(med.out4, rho.by = 0.1, effect.type = "indirect", sims = 1000)
sens.out5 <- medsens(med.out5, rho.by = 0.1, effect.type = "indirect", sims = 1000)
sens.out6 <- medsens(med.out6, rho.by = 0.1, effect.type = "indirect", sims = 1000)

## Combine all the sensitivity analysis graphs with par command
par(mfrow=c(3,3))

plot(sens.out1, main = "Endorser Moral ACME(p)", ylab = "Protest Support: ACME")
plot(sens.out2, main = "Protest Legal ACME(p)", ylab = "Protest Support: ACME")
plot(sens.out3, main = "Protest Repress ACME(p)", ylab = "Protest Support: ACME")

plot(sens.out4, main = "Endorser Moral ACME(p)", ylab = "Protest Justified: ACME")
plot(sens.out5, main = "Protest Legal ACME(p)", ylab = "Protest Justified: ACME")
plot(sens.out6, main = "Protest Repress ACME(p)", ylab = "Protest Justified: ACME")